package rpa

import "context"

type RpaStartParam struct {
	// 协议版本, 用于兼容不同的rpa客户端版本，客户端发布版本最好定义发布版本编号
	Version int8 `json:"version"`
	// 客户端版本编号
	RpaVersion string `json:"rpa_version"`
	// 租户编号
	TenantCode string `json:"tenant_code"`
	// 数据存储所属账号，如果账号不存在默认为admin
	UserMobile string `json:"user_mobile"`
	// 密钥
	Secret string `json:"secret"`
	//机器码
	MachineCode string `json:"machine_code"`
}

type RpaHandler func(ctx context.Context, protoVersion int8, rpaVersion string, param *RpaMessage) (interface{}, error)

const (
	BUSS_TYPE_RCC_WEB = 1    // rcc web rpa
	RCC_WEB_POST_1001 = 1001 // 上报虚拟手机号
	RCC_WEB_POST_1002 = 1002 // 上报真实手机号
	RCC_WEB_GET_2001  = 2001 // 获取手机号外呼结果
	RCC_WEB_GET_2002  = 2002 // 解析rcc加密文本内容
	RCC_WEB_GET_2003  = 2003 // 校验项目是否要爬取
)

type RpaMessageData1001 struct {
	// 虚拟手机号
	Phone string `json:"phone"`
	// 客户名称（公司名称或联系人名称）
	Name string `json:"name"`
}

type RpaMessageData1002 struct {
	// 上报的项目、联系人数据
	Text interface{} `json:"text"`
}

type RpaMessageData2001 struct {
	// 缓存数据key
	Key string `json:"key"`
}

type RpaMessageData2002 struct {
	// rcc加密文本
	EncryptedText string `json:"encrypted_text"`
}

type RpaMessageData2003 struct {
	SrcIds []string `json:"src_ids"`
}

type RpaMessage struct {
	// 消息数据类型：
	// post：1001：上报虚拟手机号，1002：上报项目数据+联系人信息
	// get: 2001: 获取手机号外呼结果，2002：解密数据
	DataType int64 `json:"data_type"`
	// 数据，json格式
	Data string `json:"data"`
	// 处理协议handler
	CallHandler RpaHandler
}

type RpaCmdData struct {
	// 协议版本, 用于兼容不同的rpa客户端版本，客户端发布版本最好定义发布版本编号
	Version int8 `json:"version"`
	// 客户端版本编号
	RpaVersion string `json:"rpa_version"`
	// rpa抓起业务对象，1：rcc web
	BussType int32 `json:"buss_type"`
	// 命令, post: 上报数据，get：获取数据，heartbeat
	Cmd string `json:"cmd"`
	// 消息体
	Message *RpaMessage `json:"message"`
}

type RpaVersion struct {
	// 协议版本, 用于兼容不同的rpa客户端版本，客户端发布版本最好定义发布版本编号
	Version int8 `json:"version"`
	// 客户端版本编号
	RpaVersion string `json:"rpa_version"`
}
